
import re

#关于正则匹配re的其他常用函数


#一、're.sub'：正则替换
langeuage = "C#PythonC#JavaC#PHP"

#1.替换所有被匹配的字段
result1 = re.sub('C#','Go',langeuage)
print("\n打印result1:")    
print(result1)          #打印:GoPythonGoJavaGoPHP

#2.只替换被匹配的n个字段
result2 = re.sub('C#','Go',langeuage,2)
print("\n打印result2:")    
print(result2)          #打印:GoPythonGoJavaC#PHP

#3.字符串自带的方法实现替换
result3 = langeuage.replace("C#","GO")
print("\n打印result3:")    
print(result3)          #打印: GOPythonGOJavaGOPHP

#4.re.sub的第二个参数可以是一个函数
def convert(value):
    print(value)
    matched = value.group()
    return '!!' + matched + '!!'

result4 = re.sub('C#',convert,langeuage)
print("\n打印result4:")    
print(result4)      
'''  
GOPythonGOJavaGOPHP
<_sre.SRE_Match object; span=(0, 2), match='C#'>
<_sre.SRE_Match object; span=(8, 10), match='C#'>
<_sre.SRE_Match object; span=(14, 16), match='C#'>

打印result4:
!!C#!!Python!!C#!!Java!!C#!!PHP
'''

#5.函数当做参数传递
#操作要求：替换字符串中所有大于等于6的数为9.小于6的数为0
string = 'A8C3721D86'
def convert1(value):
    matched = value.group()
    if int(matched) >=6:
        return '9'
    else:
        return '0'

result5 = re.sub('\d',convert1,string)
print("\n打印result4:")    
print(result5)      #打印：A9C0900D99


#二、# 're.match'与're.search'
testStr= 'A8C3721D86'
#re.match从字符串起始位置匹配，因为testStr起始位置不是数字，所以匹配结果为None
result6 = re.match('\d',testStr)
print("\n打印result6:")    
print(result6)      #打印：None

#re.search区别与re.match，从整个字符串中搜索，直到找到一个合适的结果就返回
result7 = re.search('\d',testStr)
print("\n打印result7:")    
print(result7)       #打印：<_sre.SRE_Match object; span=(1, 2), match='8'>
print(result7.group()) #打印：8

#re.findall
result8 = re.findall('\d',testStr)
print("\n打印result8:")    
print(result8)       #打印：['8', '3', '7', '2', '1', '8', '6']

#总结
#1.不同于re.findall，re.search与re.match返回的结果是对象，可以使用group函数获取值；
#2.re.search与re.match，都是只需要满足一个结果就返回；


